package com.fiap.solutions.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import com.fiap.solutions.Enum.Status;

@Entity
@SequenceGenerator(sequenceName="SEQ_PEDIDO", name="CLIENTE_ORACLE", allocationSize=1)
public class Pedido implements Serializable{
	private static final long serialVersionUID = -694017340916643608L;

	@Id
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="CLIENTE_ORACLE")
	private int codigo;
	
	@OneToMany(targetEntity = ItemPedido.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	private List<ItemPedido> itensPedido = new ArrayList<ItemPedido>();
	
	@ManyToOne
	private Cliente cliente;
	
	@Column(nullable=false)
 	@Temporal(TemporalType.DATE)
	private Date dataEntrada;
	
	@Column(nullable=false)
	@Temporal(TemporalType.DATE)
	private Date dataEntrega;
	
	@Column(nullable=false)
	private Status statuPedido;
	
	@Column(nullable=false)
	private double valorPedido;

	public int getCodigo() {
		return codigo;
	}

	public void setCodigo(int codigo) {
		this.codigo = codigo;
	}

	public List<ItemPedido> getItensPedido() {
		return itensPedido;
	}

	public void setItensPedido(List<ItemPedido> itensPedido) {
		this.itensPedido = itensPedido;
	}

	public Date getDataEntrada() {
		return dataEntrada;
	}

	public void setDataEntrada(Date  dataEntrada) {
		this.dataEntrada = dataEntrada;
	}

	public Date getDataEntrega() {
		return dataEntrega;
	}

	public void setDataEntrega(Date  dataEntrega) {
		this.dataEntrega = dataEntrega;
	}

	public Status getStatuPedido() {
		return statuPedido;
	}

	public void setStatuPedido(Status statuPedido) {
		this.statuPedido = statuPedido;
	}

	public double getValorPedido() {
		return valorPedido;
	}

	public void setValorPedido(double valorPedido) {
		this.valorPedido = valorPedido;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}
}
